home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / http_methods.nasl < prev    next >
Text File  |  2005-03-31  |  5KB  |  161 lines

  1. #
  2. # Check for bad permissions on a web server
  3. #
  4.  
  5. if(description)
  6. {
  7.  script_id(10498);
  8.  script_version ("$Revision: 1.28 $");
  9.  script_bugtraq_id(12141);
  10.  
  11.  name["english"] = "Test HTTP dangerous methods";
  12.  name["francais"] = "Teste les mΘthodes HTTP dangereuses";
  13.  script_name(english:name["english"], francais:name["francais"]);
  14.  
  15.  desc["english"] = "
  16. Misconfigured web servers allows remote clients to perform
  17. dangerous HTTP methods such as PUT and DELETE. This script
  18. checks if they are enabled and can be run
  19.  
  20. Risk factor : Medium";
  21.  
  22.  
  23.  desc["francais"] = "
  24. Certains serveurs web mal configurΘs permettent aux clients
  25. d'effectuer les mΘthodes DELETE et PUT. Ce script vΘrifie
  26. si elles sont activΘes et si elles peuvent Ωtre lancΘes";
  27.  
  28.  
  29.  script_description(english:desc["english"], francais:desc["francais"]);
  30.  
  31.  summary["english"] = "Verifies the access rights to the web server (PUT, DELETE)";
  32.  summary["francais"] = "VΘrifie les droits d'accΦs au serveur web (PUT, DELETE)";
  33.  
  34.  script_summary(english:summary["english"], francais:summary["francais"]);
  35.  # Integrist check verifies if the PUT and DELETE methods are _disabled_
  36.  # i.e. the web server should return a 501 error instead of 403
  37.  # With IIS, there is no way to get a 5xx error code.
  38.  #script_add_preference(name:"Integrist test", type:"checkbox", value:"no");
  39.  
  40.  script_category(ACT_ATTACK);
  41.  
  42.  
  43.  script_copyright(english:"This script is Copyright (C) 2000 Michel Arboi",
  44.         francais:"Ce script est Copyright (C) 2000 Michel Arboi");
  45.  family["english"] = "Remote file access";
  46.  family["francais"] = "AccΦs aux fichiers distants";
  47.  script_family(english:family["english"], francais:family["francais"]);
  48.  script_dependencie("find_service.nes", "no404.nasl");
  49.  script_require_ports("Services/www", 80);
  50.  exit(0);
  51. }
  52.  
  53. #
  54. # The script code starts here
  55. #
  56. include("http_func.inc");
  57.  
  58. #integrist = script_get_preference("Integrist test");
  59. #if (!integrist) integrist="no";
  60.  
  61. function exists(file, port)
  62. {
  63.  local_var    _soc, req, r, buf;
  64.  
  65.  _soc = http_open_socket(port);
  66.  if(!_soc)return(0);
  67.  req = http_get(item:file, port:port);
  68.  send(socket:_soc, data:req);
  69.  r = recv_line(socket:_soc, length:4096);
  70.  buf = http_recv(socket: _soc, code: r);
  71.  close(_soc);
  72.  if(ereg(pattern:"^HTTP/[0-9]\.[0-9] 200 .*", string:r)
  73.     && ("A quick brown fox jumps over the lazy dog" >< buf))
  74.  {
  75.    return(1);
  76.  }
  77.  else
  78.   return(0);
  79. }
  80.  
  81.  
  82. port = get_http_port(default:80);
  83.  
  84. if (!get_port_state(port)) exit(0);
  85.  
  86. soc = http_open_socket(port);
  87. if (!soc) exit(0);
  88.  
  89. # look for Allow field
  90. req = http_get(item: "*", port: port);
  91. req = str_replace(string: req, find: "GET", replace: "OPTIONS", count: 1);
  92. send(socket: soc, data: req);
  93. r = http_recv(socket: soc);
  94.  
  95. allow = egrep(string: r, pattern: "^Allow:");
  96. ##if (!allow) allow = "Allow: PUT,DELETE";
  97.  
  98. soc = http_open_socket(port);
  99. if (!soc) exit(0);
  100.  
  101.  for (i=1; exists(file:string("/puttest", i,".html"), port:port); i = i+1)
  102.  {
  103.    if(i > 20)exit(0); # we could not test this server - really strange
  104.  } 
  105.  name = string("/puttest",i,".html");
  106.  #display(name, " is not installed\n");
  107.  c = crap(length:77, data:"A quick brown fox jumps over the lazy dog");
  108.  req = http_put(item:name, port:port, data:c);
  109.  send(socket:soc, data:req);
  110.  
  111.  l = recv_line(socket:soc,length:1024);
  112.  close(soc);
  113.  #display(l);
  114.  upload=0;
  115.  if (exists(port:port, file:name)) {
  116.   upload=1;
  117.   security_warning(port:port, protocol:"tcp",
  118. data: string("We could upload the file '",name, "' onto your web server\nThis allows an attacker to run arbitrary code on your server, or set a trojan horse\nSolution : disable this method\nRisk factor : High") );
  119.  } else {
  120.    #if("yes" >< integrist)
  121.     {
  122.   if (" 403 " >< l && "PUT" >< allow) {
  123.    #display("answer = ", l, "\n");
  124.    security_warning(port:port, protocol:"tcp",
  125. data:string("It seems that the PUT method is enabled on your web server\nAlthough we could not exploit this, you'd better disable it\nSolution : disable this method\nRisk factor : High"));
  126.     }
  127.   }
  128.  }
  129.  
  130.  
  131.  # Leave file for next test (DELETE). Dirty...
  132.  
  133.  if (! upload) { name = NULL; }
  134.  
  135.  
  136.  
  137. if (name)
  138.  soc = http_open_socket(port);
  139.  if(!soc)exit(0);
  140.  req = http_delete(item:name, port:port);
  141.  send(socket:soc, data: req);
  142.  l = recv_line(socket:soc, length:1024);
  143.  
  144.  if (" 200 " >< l) {
  145.   e = exists(port:port, file:name);
  146. }
  147. else
  148.  e = 1;
  149.  
  150.   if(!e)
  151.     security_hole(port:port, protocol:"tcp",
  152. data: string("We could DELETE the file '", name, "'on your web server\nThis allows an attacker to destroy some of your pages\nSolution : disable this method\nRisk factor : High") ) ;
  153.  } else {
  154.   if (" 403 " >< l && " is disabled " >!< l && "DELETE" >< allow) {
  155.    security_warning(port:port, protocol:"tcp",
  156. data:string("It seems that the DELETE method is enabled on your web server\nAlthough we could not exploit this, you'd better disable it\nSolution : disable this method\nRisk factor : Medium"));
  157.  }
  158. }
  159.  
  160.